home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / embedded / m68k / xlate09.arc / STUB09.TXT < prev    next >
Text File  |  1980-01-01  |  8KB  |  201 lines

  1. ********************************************************************
  2. *             MC6809 TO MC68000 CONVERSION FRONT END STUB
  3. *
  4. *                           ***STUB09***
  5. *
  6. *        THIS CODE CONTAINS SUBROUTINES THAT SUPPORT THE TRANSLATION
  7. *        PROCESS. THEY CAN BE CLASSIFIED INTO 3 AREAS :
  8. *                  1) INSTRUCTION SIMULATION
  9. *                  2) DATA REGISTER MANIPULATON
  10. *                  3) CONDITION CODE CONTROL
  11.  
  12. *        THE TRAN09 PROGRAM WILL REPLACE ANY END STATMENT CONTAINING
  13. *        AN ENTRY POINT ADDRESS WITH THE SEQUENCE:
  14. *
  15. *                  ...START  EQU       <OLD.END.ENTRY>
  16. *                            END       ...INIT
  17. *
  18. *        THIS ALTERS INITIAL CONTROL TO THE CODE BELOW WHICH IS
  19. *        REQUIRED TO INITIALIZE THE SYSTEM STACK AND PSUEDO PROGRAM
  20. *        STACK BEFORE ACTUALLY ENTERING THE CONVERTED PROGRAM PROPER.
  21.  
  22.          SECTION   0
  23.  
  24.          DS.W      30        USER 68000 CODE STACK FOR STUB USE ETC.
  25. ..STACK  DS.W      1         STACK UPPER LIMIT
  26.  
  27. *      THE ABOVE STACK IS ONLY USED FOR INTERNAL SUBROUTINE CALLS
  28. *      AND POSSIBLE 68000 CODE ADDED BY THE USER.  USER ADDED
  29. *      CODE MUST REMEMBER THAT SP DOES NOT POINT TO THE CONVERTED
  30. *      PROGRAM'S OPERATIVE STACK (S) WHICH INSTEAD IS BASED ON A6.
  31.  
  32.          XDEF      ..DIN,..DOUT,..JSR,..RTS,..CTOX,..CREP,..VREP
  33.          XDEF      ..DPR,..DPW,..CLRAB,..MUL,..INIT
  34.  
  35. ..INIT   LEA       ..STACK,SP      STACK FOR INTERNAL AND USER 68000 CODE USE
  36.  
  37. *                        INITIALISE REGISTERS
  38.  
  39.          MOVEQ.L   #0,D0     ACCA
  40.          MOVEQ.L   #0,D1     ACCB
  41.          MOVEQ.L   #0,D2     ACCD  (A+B CONCATENATED WHEN NECESSARY)
  42.          MOVEQ.L   #0,D3     TEMPORARY REG
  43.          MOVEQ.L   #0,D4     ADDRESS PASS REGISTER (TO UPDATE CONDITION CODES)
  44.          MOVEQ.L   #0,D5     CCR TEMP REG
  45.          MOVEA.L   D0,A0     X
  46.          MOVEA.L   D0,A1     Y
  47.          MOVEA.L   D0,A2     PC (LOAD WHEN NEEDED FOR PCR ADDR MODE EMULATION)
  48.          MOVEA.L   D0,A3     TEMPORARY REGISTER
  49.          MOVEA.L   D0,A4     DP (BITS 8 TO 15)
  50.          MOVEA.L   D0,A5     U
  51.          MOVEA.L   D0,A6     S
  52.          JMP       ..START(PC)         START USER CODE
  53.  
  54. *        A TYPICAL STACK CONFIGURATION MIGHT BE :-
  55. *
  56. *                     WORDS
  57. *                  |_________|         ..STACK-30
  58. *                  |_________|             ^
  59. *                  |_________|             !          SYSTEM USER STACK (A7)
  60. *                  ~_________~             !
  61. *                  |_________|             !
  62. *        __________|_________|_______  ..STACK
  63. *                  |_________|             ^
  64. *                  |_________|             !       6809 PSEUDO S STACK (A6)
  65. *                  ~_________~             !
  66. *                  |_________|             !
  67. *        __________|_________|_______  ..STAK09
  68. *                  |_________|             |
  69. *                  ~_________~             |       6809 GLOBAL VARIABLES (A5)
  70. *                  |_________|             |
  71. *                  |_________|             V
  72. *
  73. *        COMMON PRACTICE IS TO USE U AS A STACK MARK TO REFERENCE GLOBAL
  74. *        VARIABLES PLACED IN MEMORY HIGHER THAN THE S STACK.
  75.  
  76.  
  77. *********************
  78. * SIMULATION ASSIST *
  79. *     SUBROUTINES   *
  80. *********************
  81.  
  82. **********
  83. * SET 'X' BIT SAME AS 'C' BIT. CALL BEFORE 68K INSTRUCTIONS WHICH USE THE
  84. * 'X' BIT.
  85.  
  86. ..CTOX   MOVE.W    (A7)+,SR  RESTORE STACK
  87.          ORI.B     #$10,CCR  SETR X BIT
  88.          BCS.S     ..XOK     IF CARRY SET, FINISH
  89.          ANDI.B    #$EF,CCR  ELSE CLEAR X BIT
  90. ..XOK    RTS                 RETURN TO CALLER
  91.  
  92. **********
  93. * JSR CAN ONLY OPERATE WITH A7. TO MAINTAIN COMPATIBLITY WITH 6809 CODE
  94. * THE 6809 PSEUDO S STACK MUST BE UPDATED ACCORDINGLY.
  95.  
  96. ..JSR    MOVE.W    SR,-(A7)  SAVE CCR
  97.          MOVE.L    2(A7),-(A6)  TRANSFER RETURN ADDRESS TO 6809 S STACK
  98.          MOVE.L    A3,2(A7)     TRANSFER CALL ADDRESS TO SYSTEM STACK
  99.          RTR                 RETURN TO CALLED ROUTINE WITH ORIGINAL CCR
  100.  
  101. **********
  102. * RTS CAN ONLY OPERATE WITH A7. TO MAINTAIN COMPATIBILITY WITH 6809 CODE
  103. * THE RETURN ADDRESS WILL BE ON THE PSEUDO S STACK AND MUST BE TRANSFERED
  104. * BACK TO THE SYSTEM STACK.
  105.  
  106. ..RTS    MOVE.W    SR,-(A7)  SAVE CCR
  107.          MOVE.L    (A6)+,2(A7)  TRANSFER RETURN ADDRESS TO SYSTEM STACK
  108.          RTR                 RETURN TO CALLING ROUTINE
  109.  
  110. **********
  111. * PSUEDO ACCD IS REG D2. ACCA (D0) AND ACCB (D1) MUST THEREFORE BE CONCATENATED
  112. * TO FORM ACCD. CALL BEFORE INSTRUCTIONS OPERATING ON ACCD. MUST BE COUPLED
  113. * WITH A CALL TO ..DOUT BEFORE FURTHER ACCA/B OPERATIONS.
  114.  
  115. ..DIN    MOVE.W    SR,-(A7)  SAVE CCR
  116.          MOVE.W    D0,D2     ACCA TO D LS BYTE
  117.          LSL.W     #8,D2     MOVE TO MS BYTE, CLEAR D LS BYTE
  118.          OR.W      D1,D2     ACCB TO D LS BYTE
  119.          RTR                 RETURN & RESTORE CCR
  120.  
  121. **********
  122. * PSUEDO ACCD IS REG D2. AFTER ACCD OPERATION, D2 MUST BE SPLIT TO FORM THE
  123. * NEW ACCA (D0) AND ACCB (D1).
  124.  
  125. ..DOUT   MOVE.W    SR,-(A7)  SAVE CCR
  126.          MOVE.W    D2,D1     D TO B
  127.          ANDI.W    #$00FF,D1 CLEAR MS BYTE
  128.          LSR.W     #8,D2     MOVE MS BYTE TO LS BYTE, CLEAR MS BYTE
  129.          MOVE.W    D2,D0     D TO A
  130.          RTR
  131.  
  132. **********
  133. * PSUEDO DP REG IS MS BYTE (FOR EASY CONCATENATION) OF A4.W . BEFORE READING
  134. * DP (I.E. BY EXG OR TFR), IT MUST BE TRANSFERED AND ADJUSTED TO LS BYTE.
  135. * NOTE : CCR SAVE NOT NECESSARY. SUBSEQUENT CODE WILL CORRUPT IT.
  136.  
  137. ..DPR    MOVE.W    A4,D3     DP TO TEMP
  138.          LSR.W     #8,D3     SHIFT INTO LS BYTE
  139.          AND.L     #$000000FF,D3   ENSURE EVERYTHING ELSE IS CLEAR!
  140.          RTS
  141.  
  142. **********
  143. * PSUEDO DP REG IS MS BYTE (FOR EASY CONCATENATION) OF A4. BEFORE WRITING
  144. * DP (I.E. BY EXG OR TFR), IT MUST BE TRANSFERED AND ADJUSTED TO MS BYTE.
  145. * TO AVOID PROBLEMS WITH SIGN EXTENSION, DURING MANIPULATION DP IS CONSIDERED
  146. * AS A4.L .
  147.  
  148. ..DPW    MOVE.W    SR,-(A7)  SAVE CCR
  149.          LSL.W     #8,D3     SHIFT INTO MS BYTE, CLEAR LS BYTE
  150. *                            MS WORD SHOULD ALREADY BE CLEAR.
  151.          MOVE.L    D3,A4     MOVE TEMP TO DP
  152.          RTR
  153.  
  154. **********
  155. * TO SIMULATE MUL, MS BYTE OF RESULT FROM MULU MUST BE MOVED INTO D0 (ACCA)
  156. * AND ADJUSTED. MS BYTE OF D1 (ACCB) SHOULD ALSO BE CLEARED.
  157.  
  158. ..MUL    MULU.W    D0,D1     A x B TO B
  159.          MOVE.W    D1,D0     COPY B TO A
  160.          LSR.W     #8,D0     SHIFT MS BYTE TO LS BYTE OF A, CLEAR MS BYTE
  161.          AND.W     #$00FF,D1 CLEAR MS BYTE OF B
  162.          RTS
  163.  
  164. **********
  165. * SOME 68K CODE WILL CORRUPT THE MS BYTES OF D0 (ACCA) AND D1 (ACCB). TO
  166. * MAINTAIN INTEGRITY, THESE BYTES SHOULD BE CLEARED. SOME OPERATIONS
  167. * WILL ASSUME THIS TO BE THE CASE (E.G. INSTRUCTIONS AFFECTING ACCA/B
  168. * WHICH DO NOT SUPPORT BYTE SIZE OPERATIONS).
  169.  
  170. ..CLRAB  MOVE.W    SR,-(A7)  SAVE CCR
  171.          ANDI.L    #$000000FF,D0 CLEAR MS BYTE A
  172.          ANDI.L    #$000000FF,D1 CLEAR MS BYTE B
  173.          RTR
  174.  
  175. *************************************************************************
  176. *
  177. *   OPTIONAL ROUTINES TO CORRECT CLEARING OF THE C AND V BITS
  178. *   (SEE USERS GUIDE FOR IMPLIMENTATION). D5 ASSUMED TO CONTAIN OLD CCR.
  179.  
  180. ..CREP   ANDI.B    #$FE,CCR  CLEAR CARRY
  181.          MOVE.W    SR,-(A7)  SAVE CCR
  182.          LSR.W     #1,D5     OLD C BIT TO C
  183.          BCC.S     ..CSROK   QUIT IF C CLEAR
  184.          ORI.B     #$01,1(A7) ELSE SET C IN STACKED CCR
  185. ..CSROK  RTR                 RETURN AND RESTORE CORRECTED CCR
  186.  
  187. ..VREP   ANDI.B    #$FD,CCR  CLEAR V BIT
  188.          MOVE.W    SR,-(A7)  SAVE CCR
  189.          LSR.W     #2,D5     OLD V BIT TO C
  190.          BCC.S     ..VSROK   QUIT IF C CLEAR
  191.          ORI.B     #$02,1(A7) ELSE SET V IN STACKED CCR
  192. ..VSROK  RTR                 RETURN AND RESTORE CORRECTED CCR
  193.  
  194.          OPT       A,FRS     ABSOLUTE EXPRESSIONS AND 16-BIT FORWARDS
  195.  
  196. *********** END OF CONVERSION FRONT-END CODE***********
  197.  
  198. ..START  EQU       *         DEFAULT ENTRY TO PROGRAM IF NO END STMT OPERAND
  199.  
  200.          END
  201.